package edu.asselvi.seguros.controle;

import java.io.BufferedReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import edu.asselvi.seguros.dao.ContratoDao;
import edu.asselvi.seguros.dao.ItemDao;
import edu.asselvi.seguros.dao.MarcaDao;
import edu.asselvi.seguros.dao.ModeloDao;
import edu.asselvi.seguros.dao.TipoItemDao;
import edu.asselvi.seguros.db.ConnectionFactory;
import edu.asselvi.seguros.db.DbUtils;
import edu.asselvi.seguros.exception.ESegurosErrosGeral;
import edu.asselvi.seguros.exception.SegurosException;
import edu.asselvi.seguros.pojo.Contrato;
import edu.asselvi.seguros.pojo.Item;
import edu.asselvi.seguros.pojo.Marca;
import edu.asselvi.seguros.pojo.Modelo;
import edu.asselvi.seguros.pojo.TipoItem;


public class ControleItem extends DbUtils {

	BufferedReader in = null;

	public ControleItem(BufferedReader br) {
		this.in = br; 
	}
	
	
	public void cadastrar() {

		Connection conn = null;
		
		try {
			
			conn = new ConnectionFactory().getConnection();
			
			Item item = new Item();
			
			//primeiro lista todos os contratos cadastrados
			System.out.println("SELECIONE UM CONTRATO CADASTRADO");
			List<Contrato> contratos = new ContratoDao(conn).list();
			for (Contrato contrato: contratos) {
				System.out.println(contrato.toString());
			}
			//pega id do contrato para relacionar item e contrato
			System.out.println("CODIGO: ");
			item.setFk_id_contrato(Integer.parseInt(in.readLine()));

			//================================================================
			
			//lista todas os tipos de contrato cadastrados
			System.out.println("SELECIONE UM TIPO DE CONTRATO CADASTRADO");
			List<TipoItem> tipoItens = new TipoItemDao(conn).list();
			for (TipoItem tipoItem : tipoItens) {
				System.out.println(tipoItem.toString());
			}
			//pega id do tipo de contrato
			System.out.println("CODIGO: ");
			item.setFk_id_tipo_item(Integer.parseInt(in.readLine()));			

			//================================================================
			
			//lista todas as marcas cadastradas
			System.out.println("SELECIONE UMA MARCA CADASTRADA");
			List<Marca> marcas = new MarcaDao(conn).list();
			for (Marca marca : marcas){
				System.out.println(marca.toString());
			}
			//pega id da marca para listar todos os modelos desta marca
			System.out.println("CODIGO: ");
			int idMarca = Integer.parseInt(in.readLine());

			//================================================================
			
			//lista todas os modelos cadastradas relacionados com a marca selecionada
			System.out.println("SELECIONE UM MODELO CADASTRADO");
			List<Modelo> modelos = new ModeloDao(conn).listByMarca(idMarca);
			for (Modelo modelo : modelos) {
				System.out.println(modelo.toString());
			}
			//pega id da marca para listar todos os modelos desta marca
			System.out.println("CODIGO: ");
			item.setFk_id_modelo(Integer.parseInt(in.readLine()));			
			
			//================================================================

			//coleta demais informacoes sobre o item
			
			System.out.print("DESCRICAO: ");
				item.setDescricao(in.readLine());
			System.out.print("DOCUMENTO: ");
				item.setDocumento(in.readLine());
			System.out.print("ANO: ");
				item.setAno(Integer.parseInt(in.readLine()));
			System.out.print("VALOR: ");
				item.setValor(Double.parseDouble(in.readLine()));
			System.out.print("FRANQUIA: ");
				item.setFranquia(Double.parseDouble(in.readLine()));
			System.out.print("INDENIZACAO: ");
				item.setIndenizacao(Double.parseDouble(in.readLine()));
			
			

			//salva no banco
			item = new ItemDao(conn).insert(item); 
			System.out.println(item.toString());

			
		} catch (SegurosException e) {
			System.err.println(e.getMessage());
			
		} catch (IOException e) {
			System.err.println(ESegurosErrosGeral.ERRO_TECLADO);
			
		} catch (SQLException e) {
			System.err.println(ESegurosErrosGeral.ERRO_DE_CONEXAO);
			
		} catch (NumberFormatException e) {
			System.err.println(ESegurosErrosGeral.ERRO_DE_FORMATO);
			
		} finally {
			close(conn);
		}
	}
	
	
}
